﻿using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using SiGeCoPre.Presupuesto_BL;
using SiGeCoPre.Presupuesto_DTO;
using SiGeCoPre.Presupuesto_Factory;
using SiGeCoPre.Presupuesto_Util;
using SiGeCoPre.Presupuesto_ViewGeneral;

namespace SiGeCoPre.Presupuesto_ViewModificacion
{
    /// <summary>
    /// Formulario para modificar clientes
    /// </summary>
    public partial class frmModificarCliente : Form
    {
        static int idCliente = 0;
        BLClientes createCliente = BLFactoryPresupuesto.createCliente();
        BLCiudades createCiudad = BLFactoryPresupuesto.createCiudad();
        BLClientesCiudades createCliCiu = BLFactoryPresupuesto.createClienteCiudad();

        public frmModificarCliente()
        {
            InitializeComponent();
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            frmClientes clientes = new frmClientes();
            clientes.FormClosed += new FormClosedEventHandler(clientes_FormClosed);
            clientes.Show();
        }

        private void clientes_FormClosed(object sender, FormClosedEventArgs e)
        {
            try
            {
                if (0 != frmClientes.pasarId())
                {
                    idCliente = frmClientes.pasarId();
                    DataTable listadoClientes = createCliente.getAllClientes();
                    if (null != listadoClientes)
                    {
                        txtBusqueda.Text = listadoClientes.Select("id = " + idCliente + "")[0]["Nombre"].ToString();
                    }
                }
            }
            catch (Exception ex)
            {
                Texto.escribirLog(ex.Message);
            }
            
        }

        private void txtBusqueda_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (string.IsNullOrEmpty(txtBusqueda.Text.Trim()))
                {
                    txtCuit.Text = "";
                    txtDireccion.Text = "";
                    txtMail.Text = "";
                    txtNombre.Text = "";
                    txtTelefono.Text = "";
                    cmbCiudad.Text = "";
                    return;
                }

                clientesDTO c = createCliente.getCliente(txtBusqueda.Text);
                clientesCiudadesDTO cc = createCliCiu.getClienteCiudad(txtBusqueda.Text);

                if (null != c)
                {
                    txtCuit.Text = c.Cuit;
                    txtDireccion.Text = c.Direccion;
                    txtMail.Text = c.Mail;
                    txtNombre.Text = c.Nombre;
                    txtTelefono.Text = c.Contacto;
                    cmbCiudad.Text = cc.Ciudad;
                }
                else
                {
                    txtCuit.Text = "";
                    txtDireccion.Text = "";
                    txtMail.Text = "";
                    txtNombre.Text = "";
                    txtTelefono.Text = "";
                    cmbCiudad.Text = "";
                }
            }
            catch (Exception ex)
            {
                txtCuit.Text = "";
                txtDireccion.Text = "";
                txtMail.Text = "";
                txtNombre.Text = "";
                txtTelefono.Text = "";
                cmbCiudad.Text = "";
                Texto.escribirLog(ex.Message);
                return;
            }
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            try
            {
                if (verificar())
                {
                    //modificacion de cliente
                    clientesDTO c = new clientesDTO();
                    c.Activo = true;
                    c.Contacto = txtTelefono.Text;
                    c.Cuit = txtCuit.Text;
                    c.Direccion = txtDireccion.Text;
                    c.Mail = txtMail.Text;
                    c.Nombre = txtNombre.Text;

                    Boolean modificado = createCliente.updateCliente(c, txtBusqueda.Text);
                    if (modificado)
                    {
                        //modificacion de cliente ciudad
                        clientesDTO cli = createCliente.getCliente(txtBusqueda.Text);
                        clientesCiudadesDTO cc = createCliCiu.getClienteCiudad(txtNombre.Text);
                        ciudadesDTO ciu = createCiudad.getCiudad(cmbCiudad.Text);

                        clientesCiudadesDTO cliCiu = new clientesCiudadesDTO();
                        cliCiu.Nombre = txtNombre.Text;
                        cliCiu.Ciudad = cmbCiudad.Text;

                        Boolean modificadoCliCiu = createCliCiu.updateClienteCiudad(cliCiu, cc.ID);

                        if (modificado && modificadoCliCiu)
                        {

                            MessageBox.Show("Cliente Modificado!!", "Exito", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            this.Close();
                            this.Dispose();
                        }
                        else
                        {
                            MessageBox.Show("Error al intentar Modificar!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            Texto.escribirLog("Error en modificarCliente");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Texto.escribirLog(ex.Message);
            }
            
        }

        private bool verificar()
        {
            bool verificado = false;
            bool nombreCorrecto = false;
            bool dirCorrecta = false;
            bool ciuCorrecta = false;
            bool telCorrecto = false;
            bool mailCorrecto = false;
            bool cuitCorrecto = false;

            if (!Validador.es_cadena(txtNombre))
            {
                errorProvider1.SetError(txtNombre, "Sólo Letras");
                txtNombre.BackColor = Color.Honeydew;
            }
            else
            {
                nombreCorrecto = true;
            }

            if (!Validador.es_direccion(txtDireccion))
            {
                errorProvider1.SetError(txtDireccion, "Sólo Letras y Números");
                txtDireccion.BackColor = Color.Honeydew;
            }
            else
            {
                dirCorrecta = true;
            }

            if (!Validador.es_cadena(cmbCiudad))
            {
                errorProvider1.SetError(cmbCiudad, "Sólo Letras");
                cmbCiudad.BackColor = Color.Honeydew;
            }
            else
            {
                ciuCorrecta = true;
            }

            if (!Validador.es_telefono(txtTelefono))
            {
                errorProvider1.SetError(txtTelefono, "Error de formato");
                txtTelefono.BackColor = Color.Honeydew;
            }
            else
            {
                telCorrecto = true;
            }

            if (!Validador.es_email(txtMail))
            {
                errorProvider1.SetError(txtMail, "Ejemplo ejemplo@ejemplo.ejemplo");
                txtMail.BackColor = Color.Honeydew;
            }
            else
            {
                mailCorrecto = true;
            }

            if (!Validador.es_numero(txtCuit))
            {
                errorProvider1.SetError(txtCuit, "Sólo Números");
                txtCuit.BackColor = Color.Honeydew;
            }
            else
            {
                cuitCorrecto = true;
            }

            if (nombreCorrecto && cuitCorrecto && ciuCorrecta
                && mailCorrecto && telCorrecto && dirCorrecta)
            {
                verificado = true;
            }

            return verificado;
        }

        private void frmModificarCliente_Load(object sender, EventArgs e)
        {
            try
            {
                DataTable ciudades = createCiudad.getAllCiudad();
                if (null != ciudades)
                {
                    foreach (DataRow dr in ciudades.Rows)
                    {
                        cmbCiudad.Items.Add(dr["Nombre"].ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                Texto.escribirLog(ex.Message);
            }
            
        }

    }
}
